<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * 商品属性
 */
class Property extends Auth_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->model('goodsval_mdl');
        $this->load->model('goods_mdl');
    }

    public function update()
    {
        $gid = $this->input->get('gid',TRUE);

        if(empty($gid)){
            show_error('参数错误！');
            exit;
        }

        /** 判断该商品是否存在 */
        $this->db->select('id,name');
        $this->db->where('id',intval($gid));
        $goods_res = $this->goods_mdl->get_one();

        if(empty($goods_res)){
            show_error('参数错误');
            exit;
        }

        /** 查询该商品属性 */
        $this->db->where('goods_id',intval($gid));
        $this->db->order_by('`sort` DESC , `id` DESC');
        $value_res = $this->goodsval_mdl->select();

        /** 数据组装 */
        $this->load->library('assembly');
        $res_list = $this->assembly->data($value_res,0);

        $this->_view('admin/property_update',[
            'res' => $res_list,
            'gid' => $gid
        ]);
    }

    /**
     * 添加商品属性
     */
    public function create(){
        $post = $this->input->post(NULL,TRUE);

        if(!empty($post) && $this->input->is_ajax_request()){

            /** 校验 */
            if(empty($post['goods_id'])){
                die('参数错误！');
            }
            if(empty($post['name'])){
                die('属性名称不能为空！');
            }
            if(empty($post['value'])){
                die('默认属性值不能为空');
            }
            if(!is_numeric($post['price'])){
            	die('属性价格错误！');
            }

            $data1 = [
                'pid' => 0,
                'goods_id' => intval($post['goods_id']),
                'field' => $post['name']
            ];
            $r = $this->goodsval_mdl->create($data1);
            if($r === false) die('添加失败！');

            $data2 = [
                'pid' => $this->db->insert_id(),
                'goods_id' => intval($post['goods_id']),
                'field' => $post['value'],
            	'price' => $post['price']
            ];
            $r = $this->goodsval_mdl->create($data2);
            echo $r === false ? '添加失败！' : 1;

        }else{
            $gid = $this->input->get('gid',TRUE);

            /** 判断该商品是否存在 */
            $this->db->select('id,name,price');
            $this->db->where('id',intval($gid));
            $goods_res = $this->goods_mdl->get_one();
            if(empty($goods_res)){
                show_error('参数错误！');
                exit;
            }

            $this->load->view('admin/property_create',['goods'=>$goods_res]);
        }

    }

    /**
     * 删除属性
     * 如果父级没有下级属性之后， 删除父级
     */
    public function delete(){
        if(!$this->input->is_ajax_request()){
            show_404();
            exit;
        }

        $id = $this->input->post('pro_id',TRUE);

        if(empty($id)){
            die('参数错误！');
        }

        //查询该数据是否存在
        $this->db->start_cache();
        $this->db->where('id',$id);
        $this->db->stop_cache();

        $c_res = $this->goodsval_mdl->get_one();

        if(empty($c_res)){
            die('该数据不存在！');
        }

        //删除数据
        $d_res = $this->goodsval_mdl->delete();

        $this->db->flush_cache();
        //判断父级是否还有属性存在
        $this->db->where('pid',$c_res['pid']);
        $f_res = $this->goodsval_mdl->get_one();

        if(empty($f_res)){
            $this->db->where('id',$c_res['pid']);
            $this->goodsval_mdl->delete();
            //echo $this->db->last_query();
        }

        echo $d_res === false ? '删除成功' : 1;
    }

    /**
     * 添加属性值
     */
    public function create_val(){
        if(!$this->input->is_ajax_request()){
            show_404();
            exit;
        }

        $pid = $this->input->post('pid',TRUE);
        $val = $this->input->post('val',TRUE);
        if(empty($pid) || empty($val)){
            die('参数错误！属性值不能为空');
        }

        /** 判断该PID是否存在 */
        $this->db->where('id',intval($pid));
        $p_res = $this->goodsval_mdl->get_one();
        if(empty($p_res)){
            die('参数错误！该属性不存在');
        }
        
        /** 查询该商品价格 */
        $this->db->select('id,name,price');
        $this->db->where('id',intval($p_res['goods_id']));
        $goods_res = $this->goods_mdl->get_one();

        /** 信息添加 */
        $data = [
            'pid' => $pid,
            'goods_id' => $p_res['goods_id'],
            'field' => $val,
            'sort' => 0,
        	'price' => $goods_res['price']
        ];
        $res = $this->goodsval_mdl->create($data);
        $this->logs->add($res,'添加商品属性值');
        echo $res === false ? '操作失败！' : 1;
    }

    /**
     * 设置属性值排序
     */
    public function prosort(){
        $id = $this->input->post('vid',TRUE);
        $sort = $this->input->post('sort',TRUE);

        if(!$this->input->is_ajax_request()){
            show_404();
            exit;
        }

        if(empty($id)){
            die('参数错误！');
        }

        if(!is_numeric($sort) || $sort < 0){
            die('排序值为 大于等于 0 的整数');
        }

        /** 判断属性是否存在 */
        $this->db->start_cache();
        $this->db->where('id',intval($id));
        $this->db->stop_cache();

        $p_res = $this->goodsval_mdl->get_one();

        if(empty($p_res)){
            die('参数错误');
        }
        
        if($p_res['sort'] == $sort){
            echo 1;
            exit;
        }

        /** 修改排序值 */
        $data = [
            'sort' => intval($sort)
        ];

        $res = $this->goodsval_mdl->update($data);

        echo $res === true ? 1 : '操作失败！';
    }


    /**
     * 修改属性值
     */
    public function updateval(){
        $id = $this->input->post('vid',TRUE);
        $val = $this->input->post('val',TRUE);

        if(!$this->input->is_ajax_request()){
            show_404();
            exit;
        }

        if(empty($id) || empty($val)){
            die('属性值不能为空');
        }

        /** 判断属性是否存在 */
        $this->db->start_cache();
        $this->db->where('id',intval($id));
        $this->db->stop_cache();

        $p_res = $this->goodsval_mdl->get_one();

        if(empty($p_res)){
            die('参数错误');
        }

        if($p_res['field'] == $val){
            echo 1;
            exit;
        }

        /** 修改值 */
        $data = [
            'field' => $val
        ];

        $res = $this->goodsval_mdl->update($data);

        echo $res === true ? 1 : '操作失败！';

    }
    
    /**
     * 设置属性价格
     */
	public function set_price(){
		$id = $this->input->post('vid',TRUE);
		$price = $this->input->post('price',TRUE);
		
		if(!$this->input->is_ajax_request()){
			show_404();
			exit;
		}
		
		if(empty(intval($id))){
			die('参数错误');
		}
		
		if(!is_numeric($price)){
			die('请输入正确的商品价格');
		}
		
		$data = array(
				'price' => $price
		);
		$this->db->where('id',$id);
		$res = $this->goodsval_mdl->update($data);
		
		echo $res === true ? 1 : '操作失败！';
	}
	
	/**
	 * 设置默认属性
	 */
	public function set_status(){
		$id = $this->input->post('vid',TRUE);
		$id = intval($id);
		if(empty($id)){
			die('参数错误');
		}
		
		$this->db->where('id',$id);
		$res = $this->goodsval_mdl->get_one();
		
		/** 设置所有该商品下属性为非默认属性 */
		$this->db->where('goods_id',$res['goods_id']);
		$this->goodsval_mdl->update(array('status'=>1));
		
		$this->db->where('id',$id);
		$res = $this->goodsval_mdl->update(array('status'=>2));
		echo $res === true ? 1 : '操作失败！';
	}
}